# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name：     day180_pyqt5_cutomActive
   Description :   In this example, we create a custom widget.

   Author :       fuml
   date：          2019/10/13
-------------------------------------------------
   Change Activity:
                   2019/10/13: not run normal
-------------------------------------------------
"""
import  sys
from  PyQt5.QtWidgets import QWidget,QApplication,QSplitter,QSlider,QHBoxLayout,QVBoxLayout
from PyQt5.QtGui import QPainter,QBrush,QPen,QColor,QFont
from PyQt5.QtCore import QObject,Qt,pyqtSignal


class Communicate(QObject):
    updateBW =pyqtSignal(int)

class BurningWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setMinimumSize(1,30)
        self.value = 75
        self.num = [75,150,225,300,375,450,525,600,675]

    def setValue(self,value):
        self.value = value

    def paintEvent(self, QPaintEvent):
        qp = QPainter()
        qp.begin(self)
        self.drawWidget(qp)
        qp.end()

    def drawWidget(self,qp):
        font = QFont('Serif',7,QFont.Light)
        qp.setFont(font)

        size = self.size()
        w=size.width()
        h=size.height()

        step = int(round(w/10.0))
        till = int( (w/750.0)*self.value )
        full = int( (w/750.0)*700 )

        if self.value >=700:
            qp.setPen(QColor(255,255,255))
            qp.setBrush(QColor(255,255,184))
            qp.drawRect(0,0,full,h)
            qp.setPen(QColor(255,175,175))
            qp.setBrush(QColor(255,175,175))
            qp.drawRect(full,0,till - full ,h)
        else:
            qp.setPen(QColor(255,255,255))
            qp.setBrush(255,255,184)
            qp.drawRect(0, 0, full, h)

        pen = QPen(QColor(20,20,20),1,Qt.SolidLine)

        qp.setPen(pen)
        qp.setBrush(Qt.NoBrush)
        qp.drawRect(0,0,w-1,h-1)

        j=0
        for i in range(step,10*step,step):
            qp.drawLine(i,0,i,5)
            metrics = qp.fontMetrics()
            fw = metrics.width(str(self.num[j]))
            qp.drawText(i-fw/2,h/2,str(self.num[j]))
            j=j+1


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        sld = QSlider(Qt.Horizontal,self)
        sld.setFocusPolicy(Qt.NoFocus)
        sld.setRange(1,750)
        sld.setValue(75)
        sld.setGeometry(30,40,150,30)

        self.c = Communicate()
        self.wid = BurningWidget()
        self.c.updateBW[int].connect(self.wid.setValue)

        sld.valueChanged[int].connect(self.changeValue)
        hbox = QHBoxLayout()
        hbox.addWidget(self.wid)

        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        self.setLayout(vbox) # nedd comment this...why???

        self.setGeometry(300,300,300,210)
        self.setWindowTitle('Burnning widget')
        self.show()

    def changeValue(self,value):
        self.c.updateBW.emit(value)
        self.wid.repaint()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
